import { defineStore } from 'pinia'
import { ref, computed } from 'vue'

export const useUserStore = defineStore('user', () => {
  // 状态
  const token = ref(localStorage.getItem('token') || '')
  const userInfo = ref({
    id: null,
    username: '',
    nickname: '',
    email: '',
    phone: '',
    avatar: '',
    status: 1,
    roles: [],
    createdAt: '',
    updatedAt: ''
  })

  // 计算属性
  const isLoggedIn = computed(() => !!token.value)
  const userName = computed(() => userInfo.value.nickname || userInfo.value.username)
  const userRoles = computed(() => userInfo.value.roles || [])

  // 方法
  /**
   * 用户登录
   * @param {Object} loginData - 登录数据
   * @returns {Promise}
   */
  async function login(loginData) {
    try {
      // 这里应该调用登录 API
      // const response = await loginAPI(loginData)
      
      // 模拟登录成功
      const mockResponse = {
        token: 'mock-jwt-token-' + Date.now(),
        user: {
          id: '1',
          username: loginData.username,
          nickname: '管理员',
          email: 'admin@example.com',
          avatar: '',
          roles: ['admin']
        }
      }

      // 保存 token
      token.value = mockResponse.token
      localStorage.setItem('token', mockResponse.token)

      // 保存用户信息
      userInfo.value = mockResponse.user

      return { success: true, message: '登录成功' }
    } catch (error) {
      console.error('登录失败:', error)
      return { success: false, message: error.message || '登录失败' }
    }
  }

  /**
   * 获取用户信息
   */
  async function getUserInfo() {
    try {
      // 这里应该调用获取用户信息的 API
      // const response = await getUserInfoAPI()
      
      // 模拟获取用户信息
      if (token.value) {
        userInfo.value = {
          id: '1',
          username: 'admin',
          nickname: '管理员',
          email: 'admin@example.com',
          avatar: '',
          roles: ['admin']
        }
      }
    } catch (error) {
      console.error('获取用户信息失败:', error)
      // 如果获取失败，可能是 token 过期，清除登录状态
      logout()
    }
  }

  /**
   * 用户登出
   */
  function logout() {
    // 清除 token
    token.value = ''
    localStorage.removeItem('token')

    // 清除用户信息
    userInfo.value = {
      id: '',
      username: '',
      nickname: '',
      email: '',
      avatar: '',
      roles: []
    }

    // 这里可以调用登出 API
    // await logoutAPI()
  }

  /**
   * 更新用户信息
   * @param {Object} info - 用户信息
   */
  function updateUserInfo(info) {
    userInfo.value = { ...userInfo.value, ...info }
  }

  return {
    // 状态
    token,
    userInfo,
    // 计算属性
    isLoggedIn,
    userName,
    userRoles,
    // 方法
    login,
    logout,
    getUserInfo,
    updateUserInfo
  }
}) 
 